// 若干个有重复的数，选择一个数后这个数相邻的数都不能选，可以让这些数
// 做下标，相邻的下标不能选择。

// 打家劫舍 II
class Solution {
public:
    int rob(vector<int>& nums) {
        int n = nums.size();
        return max(nums[0] + myrob(nums, 2, n - 2), myrob(nums, 1, n - 1));
    }
    int myrob(vector<int>& nums, int l, int r)
    {
        if (r - l < 0) return 0;
        int n = nums.size();
        vector<int> f(n), g(n);
        f[l] = nums[l];
        for (int i = l + 1; i <= r; i++)
        {
            f[i] = g[i - 1] + nums[i];
            g[i] = max(g[i - 1], f[i - 1]);
        }
        return max(f[r], g[r]);
    }
};

// 删除相邻数字的最大分数
#include <iostream>
#include <vector>
using namespace std;

const int N = 1e4 + 1;
int arr[N];

int main()
{
    int n; cin >> n;
    int m = 0;
    for (int i = 0; i < n; i++)
    {
        int x; cin >> x;
        m = max(m, x);
        arr[x]++;
    }
    vector<int> f(m + 1), g(m + 1);
    for (int i = 1; i <= m; i++)
    {
        f[i] = g[i - 1] + i * arr[i];
        g[i] = max(g[i - 1], f[i - 1]);
    }
    cout << max(f[m], g[m]) << endl;
    return 0;
}